﻿#pragma once
/*************************************************************************
 * 模块名称:   As标准网络通信模块
 * 作者:       姜一
 * 创建时间:   2023年3月
 * 最近修改:   2023年4月2日
 * 描述:       此模块不考虑复杂情况，只提供通用标准的使用内容，不冗余封装，不作为定制产品。
 * 留言:       此模块由姜一完全开发，如有修改建议或疑问请与作者咨询。
**************************************************************************/
#include "AsCoreGlobal.h"
#include "AsDefine.h"
#include "AsBinder.hpp"
#include <AsQException.h>
#include <QByteArray>
#include <QString>
#include <QVector>
#include <QMetaMethod>

class QTcpSocket;

namespace AsNetwork {

	enum DataType {
		Null,
		Bit8,
		Bit16,
		Bit32,
		Bit64,
		String,
		ByteArray
	};

	template <typename _Type>
	_Type& ref(void* ptr) {
		return *reinterpret_cast<_Type*>(ptr);
	}
	template <typename _Type>
	_Type* ptr(void* ptr) {
		return reinterpret_cast<_Type*>(ptr);
	}
	template <typename _Type>
	_Type* ncopy(const _Type& data) {
		return new _Type(data);
	}
	
	extern inline void pushToByteArray(QByteArray& byteArray, char val);
	extern inline void pushToByteArray(QByteArray& byteArray, short val);
	extern inline void pushToByteArray(QByteArray& byteArray, int val);
	extern inline void pushToByteArray(QByteArray& byteArray, long long val);
	extern inline void pushToByteArray(QByteArray& byteArray, const QString& val);
	extern inline void pushToByteArray(QByteArray& byteArray, const QByteArray& val);

	extern inline void fromByteArray(QByteArray& byteArray, int& index, char& val);
	extern inline void fromByteArray(QByteArray& byteArray, int& index, short& val);
	extern inline void fromByteArray(QByteArray& byteArray, int& index, int& val);
	extern inline void fromByteArray(QByteArray& byteArray, int& index, long long& val);
	extern inline void fromByteArray(QByteArray& byteArray, int& index, QString& val);
	extern inline void fromByteArray(QByteArray& byteArray, int& index, QByteArray& val);

	AS_CORE_EXPORT QString toClientHost(QTcpSocket* socket);
};
